// pages/example/index.js
const API = require('../../utils/api');
const auth = require('../../utils/auth');

Page({
  data: {
    // 红色文化路线关键点（带坐标）
    routePoints: [
      { id: 1, name: "台山市都斛镇", icon: "📍", date: "都斛出生", longitude: 112.798, latitude: 22.251, desc: "都斛出生（1916年）\n地点：广东省台山县都斛镇大纲村\n事件：生于律师家庭，原名林为樑。此地为其革命精神的起点，故居今存并建有纪念公园。" },
      { id: 2, name: "台山市", icon: "📚", date: "台山启蒙", longitude: 112.781, latitude: 22.251, desc: "台山启蒙（1928–1931年）\n地点：台山任远中学\n事件：任学生会主席兼校刊《骆驼》主编，发表针砭时弊的政论文章，展现早期社会责任感。" },
      { id: 3, name: "广州市", icon: "🏫", date: "广州求学", longitude: 113.264, latitude: 23.129, desc: "广州求学（1931–1933年）\n地点：广州中山大学高中部\n事件：经历九一八事变，撰写《只有一战》呼吁抗日，奠定救国志向。" },
      { id: 4, name: "上海市", icon: "🌆", date: "上海成长", longitude: 121.473, latitude: 31.230, desc: "上海成长（1933–1934年）\n地点：上海大夏大学\n事件：加入共青团，参与学运被捕，出狱后加入左翼作家联盟。1934年赴日留学前，在此接受初步革命锻炼。" },
      { id: 5, name: "延安市", icon: "✈️", date: "延安淬炼", longitude: 109.489, latitude: 36.596, desc: "延安淬炼（1937年）\n地点：延安中共中央党校\n事件：1937年从日本回国后奔赴延安，进入党校第十二班学习。更名林基路，宣誓恪守党的基本路线。1938年2月受派赴新疆开展统战工作。" },
      { id: 6, name: "迪化(乌鲁木齐)", icon: "🕌", date: "迪化拓新", longitude: 87.617, latitude: 43.792, desc: "迪化（乌鲁木齐）拓新（1938–1939年）\n地点：新疆学院（今新疆大学前身）\n教育革命：任教务长，推行团结、紧张、质朴、活泼校训，增设数理系与抗战课程，亲自讲授马列理论。\n抗日宣传：首创抗战救国日，编导话剧《呼号》《黄河之滨》，打破封建禁忌推动男女同台演出。\n盛世才打压：因印发抗日歌本遭记过处分，1939年初被调离。" },
      { id: 7, name: "库车市", icon: "🌊", date: "库车耕耘", longitude: 82.944, latitude: 41.717, desc: "库车耕耘（1939–1942年）\n地点：新疆库车县\n民生改革：释放冤狱囚犯，裁撤贪腐警察，民选区长与水利官。废除包税制，20余税种减至7种，开荒免赋三年。\n基建兴疆：修25公里水渠、4公里防洪坝（今称林基路大坝）。建粮仓、水磨坊破除地主垄断。\n教育奠基：全县学校从2所扩至35所，其妻陈茵素主管妇女教育。\n结局：1942年调乌什县后被捕，1943年9月27日就义于迪化狱中，终年27岁。" }
    ],
    
    // 地图相关数据
    centerLongitude: 113.0, // 地图中心经度（调整到路线中心）
    centerLatitude: 30.0, // 地图中心纬度
    mapScale: 4, // 地图缩放级别（调小以显示更大范围）
    showUserLocation: true, // 显示用户位置
    showRoute: true, // 显示长征路线
    mapMarkers: [], // 地图标记点
    mapPolyline: [], // 地图路线
    
    // 进度数据
    progressPercent: 15.2, // 当前进度百分比
    completedDistance: 3800, // 已完成距离（公里）
    longitude: 116.397470,
    latitude: 39.908823,
    markers: [],
    keyPoints: [],
    loading: true,
    showLegend: true,
    showSimpleLegend: true
  },

  onLoad(options) {
    // 页面加载时计算进度
    this.calculateProgress();
    // 初始化地图 - 使用本地数据，不调用API
    // this.loadMapData();
  },

  onReady() {
    // 页面首次渲染完成时，确保地图组件已加载
    setTimeout(() => {
      this.initMap();
    }, 500);
  },

  onShow() {
    // 页面显示时刷新数据
    this.calculateProgress();
    // 设置tabBar选中状态
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 1
      });
    }
    
    // 确保地图和标记点正确显示
    setTimeout(() => {
      this.initMap();
    }, 300);
  },

  // 计算长征进度
  calculateProgress() {
    // 获取真实步数计算已走的长征距离
    this.getRealSteps().then(totalSteps => {
      const distancePerStep = 4150 / 3125000; // 4150公里需要约312.5万步
      const completedDistance = Math.floor(totalSteps * distancePerStep * 100) / 100;
      const progressPercent = Math.min((completedDistance / 4150) * 100, 100);
      
      this.setData({
        completedDistance: completedDistance,
        progressPercent: progressPercent
      });
    }).catch(err => {
      console.error('获取步数失败', err);
      this.setData({
        completedDistance: 0,
        progressPercent: 0
      });
    });
  },

  // 获取真实步数 - 使用标准流程
  getRealSteps() {
    return new Promise((resolve, reject) => {
      // 引入步数工具
      const stepUtils = require('../../utils/step');
      
      // 使用标准流程获取步数
      stepUtils.getWechatSteps().then(decryptedData => {
        console.log('示例页面获取微信步数成功:', decryptedData);
        
        let totalSteps = 0;
        
        // 检查数据格式并计算总步数
        if (decryptedData.stepInfoList && Array.isArray(decryptedData.stepInfoList)) {
          // 标准格式：有stepInfoList数组，计算累计步数
          totalSteps = decryptedData.stepInfoList.reduce((sum, item) => sum + item.step, 0);
        } else if (decryptedData.step) {
          // 简化格式：直接使用今日步数
          totalSteps = decryptedData.step;
        } else {
          console.warn('未知的步数数据格式:', decryptedData);
          totalSteps = 0;
        }
        
        resolve(totalSteps);
        
      }).catch(reject);
    });
  },

  // 点击路线节点
  onPointTap(e) {
    const point = e.currentTarget.dataset.point;
    wx.showModal({
      title: `${point.icon} ${point.name}`,
      content: `时间：${point.date}\n\n${point.desc.substring(0, 50)}...`,
      confirmText: '了解更多',
      cancelText: '关闭',
      success: (res) => {
        if (res.confirm) {
          // 显示完整的历史故事
          this.showPointDetail(point);
        }
      }
    });
  },

  // 初始化地图
  initMap() {
    console.log('初始化地图和标记点');
    this.createMapMarkers();
    this.createMapPolyline();
  },

  // 创建地图标记点
  createMapMarkers() {
    console.log('创建地图标记点');
    const markers = this.data.routePoints.map((point, index) => ({
      id: point.id,
      longitude: point.longitude,
      latitude: point.latitude,
      title: point.name,
      iconPath: '../../images/icons/location.png', // 添加默认图标
      width: 30,
      height: 30,
      callout: {
        content: `${point.name}\n${point.date}`,
        color: '#ffffff',
        fontSize: 12,
        borderRadius: 5,
        bgColor: '#C41E3A',
        padding: 8,
        display: 'BYCLICK'
      }
    }));

    this.setData({
      mapMarkers: markers
    });
  },

  // 创建地图路线
  createMapPolyline() {
    console.log('创建地图路线');
    if (!this.data.showRoute) {
      this.setData({ mapPolyline: [] });
      return;
    }

    // 添加中间导航点，让路线更符合实际地理路径
    const detailedRoutePoints = [
      // 1. 台山市都斛镇 (起点)
      { longitude: 112.798, latitude: 22.251 },
      
      // 2. 台山市都斛镇 -> 台山市 (很近，直接连接)
      { longitude: 112.781, latitude: 22.251 },
      
      // 3. 台山市 -> 广州市 (经过江门)
      { longitude: 113.060, latitude: 22.590 }, // 江门
      { longitude: 113.200, latitude: 22.800 }, // 佛山方向
      { longitude: 113.264, latitude: 23.129 }, // 广州市
      
      // 4. 广州市 -> 上海市 (经过重要城市)
      { longitude: 113.500, latitude: 23.400 }, // 广州北部
      { longitude: 114.200, latitude: 24.500 }, // 韶关方向
      { longitude: 115.000, latitude: 25.800 }, // 赣州方向
      { longitude: 115.900, latitude: 28.700 }, // 南昌
      { longitude: 117.000, latitude: 30.600 }, // 安庆方向
      { longitude: 118.800, latitude: 32.050 }, // 南京
      { longitude: 119.900, latitude: 31.800 }, // 常州方向
      { longitude: 121.473, latitude: 31.230 }, // 上海市
      
      // 5. 上海市 -> 延安市 (经过内陆城市)
      { longitude: 120.200, latitude: 31.800 }, // 上海西部
      { longitude: 118.800, latitude: 32.050 }, // 南京
      { longitude: 117.200, latitude: 32.900 }, // 淮安方向
      { longitude: 115.500, latitude: 34.800 }, // 开封方向
      { longitude: 113.700, latitude: 34.800 }, // 郑州
      { longitude: 112.500, latitude: 35.500 }, // 运城方向
      { longitude: 110.500, latitude: 36.100 }, // 临汾方向
      { longitude: 109.489, latitude: 36.596 }, // 延安市
      
      // 6. 延安市 -> 乌鲁木齐 (经过西北重要城市)
      { longitude: 108.900, latitude: 36.800 }, // 延安西北
      { longitude: 107.000, latitude: 37.500 }, // 榆林方向
      { longitude: 105.000, latitude: 38.800 }, // 银川方向
      { longitude: 103.800, latitude: 36.100 }, // 兰州
      { longitude: 102.000, latitude: 37.900 }, // 武威方向
      { longitude: 99.000, latitude: 39.800 }, // 酒泉方向
      { longitude: 96.000, latitude: 40.100 }, // 哈密方向
      { longitude: 93.500, latitude: 42.800 }, // 吐鲁番方向
      { longitude: 87.617, latitude: 43.792 }, // 乌鲁木齐
      
      // 7. 乌鲁木齐 -> 库车市 (沿天山南麓)
      { longitude: 86.000, latitude: 43.000 }, // 焉耆方向
      { longitude: 84.000, latitude: 42.200 }, // 库尔勒方向
      { longitude: 82.944, latitude: 41.717 }  // 库车市 (终点)
    ];

    const polyline = [{
      points: detailedRoutePoints,
      color: '#C41E3A',
      width: 4,
      dottedLine: false,
      arrowLine: true,
      borderColor: '#FFD700',
      borderWidth: 2
    }];

    this.setData({
      mapPolyline: polyline
    });
  },

  // 地图标记点击事件
  onMarkerTap(e) {
    const markerId = e.detail.markerId;
    const point = this.data.routePoints.find(p => p.id === markerId);
    
    if (point) {
      wx.showModal({
        title: `${point.icon} ${point.name}`,
        content: `时间：${point.date}\n\n${point.desc.substring(0, 50)}...`,
        confirmText: '了解更多',
        cancelText: '关闭',
        success: (res) => {
          if (res.confirm) {
            // 显示完整的历史故事
            this.showPointDetail(point);
          }
        }
      });
    }
  },

  // 显示节点详情
  showPointDetail(point) {
    // 由于微信小程序的showModal内容长度有限制，我们使用自定义的方式显示
    const content = point.desc.replace(/\\n/g, '\n');
    
    wx.showModal({
      title: `${point.icon} ${point.name}`,
      content: content,
      confirmText: '导航到此',
      cancelText: '返回',
      success: (res) => {
        if (res.confirm) {
          // 调用地图导航
          this.navigateToPoint(point);
        }
      }
    });
  },

  // 导航到指定点
  navigateToPoint(point) {
    wx.openLocation({
      latitude: point.latitude,
      longitude: point.longitude,
      name: point.name,
      address: point.desc,
      scale: 15
    });
  },

  // 地图区域变化事件
  onRegionChange(e) {
    console.log('地图区域变化:', e.detail);
  },

  // 切换路线显示
  toggleRoute() {
    const showRoute = !this.data.showRoute;
    this.setData({ showRoute });
    this.createMapPolyline();
  },

  // 重置地图视图
  resetMapView() {
    this.setData({
      centerLongitude: 113.0,
      centerLatitude: 30.0,
      mapScale: 4
    });
  },

  // 分享功能
  onShareAppMessage() {
    return {
      title: `我在红色文化之旅上已经走了${this.data.completedDistance}公里！`,
      path: '/pages/example/index',
      imageUrl: '../../images/avatar.png'
    };
  },

  // 加载地图数据
  loadMapData: function() {
    const app = getApp();
    app.showLoading('加载地图中');
    
    this.setData({ loading: true });
    
    // 获取路线点位信息
    API.longMarch.getRoutePoints().then(routeRes => {
      // 获取重要节点信息
      API.longMarch.getKeyPoints().then(keyPointsRes => {
        const routePoints = routeRes.data || [];
        const keyPoints = keyPointsRes.data || [];
        
        // 处理路线数据
        if (routePoints.length > 0) {
          // 创建路线
          const polyline = [{
            points: routePoints.map(point => ({
              longitude: point.longitude,
              latitude: point.latitude
            })),
            color: "#C41E3A",
            width: 4,
            dottedLine: false
          }];
          
          // 设置地图中心点为第一个点
          const centerPoint = routePoints[0];
          
          // 创建重要节点标记
          const markers = keyPoints.map((point, index) => ({
            id: index,
            longitude: point.longitude,
            latitude: point.latitude,
            title: point.name,
            iconPath: "../../images/icons/marker.png",
            width: 30,
            height: 30,
            callout: {
              content: point.name,
              color: '#000000',
              fontSize: 14,
              borderRadius: 5,
              bgColor: '#ffffff',
              padding: 5,
              display: 'BYCLICK'
            }
          }));
          
          this.setData({
            longitude: centerPoint.longitude,
            latitude: centerPoint.latitude,
            polyline: polyline,
            markers: markers,
            keyPoints: keyPoints,
            loading: false
          });
        }
        
        app.hideLoading();
      }).catch(err => {
        console.error('获取重要节点失败', err);
        this.setData({ loading: false });
        app.hideLoading();
        app.showToast('获取地图数据失败，请重试');
      });
    }).catch(err => {
      console.error('获取路线点位失败', err);
      this.setData({ loading: false });
      app.hideLoading();
      app.showToast('获取地图数据失败，请重试');
    });
  },

  // 点击标记点
  markerTap: function(e) {
    const markerId = e.markerId;
    const point = this.data.keyPoints[markerId];
    
    if (point) {
      wx.showModal({
        title: point.name,
        content: point.description || '暂无详细介绍',
        confirmText: '了解更多',
        cancelText: '关闭',
        success: (res) => {
          if (res.confirm && point.detailUrl) {
            // 跳转到详情页
            wx.navigateTo({
              url: point.detailUrl
            });
          }
        }
      });
    }
  },

  // 切换图例显示
  toggleLegend: function() {
    this.setData({
      showLegend: !this.data.showLegend
    });
  },

  // 切换简化图例显示
  toggleSimpleLegend: function() {
    this.setData({
      showSimpleLegend: !this.data.showSimpleLegend
    });
  }
});